//
//  WQCUserModel.swift
//  3-微博
//
//  Created by DDDD on 16/2/27.
//  Copyright © 2016年 gongsimingzi. All rights reserved.
//

import UIKit

class WQCUserModel: NSObject , NSCoding{
////    access_token	string	用于调用access_token，接口获取授权后的access token。
//    var access_token : String?
////    expires_in	string	access_token的生命周期，单位是秒数。
//    var expires_in : NSTimeInterval = 0{
//        didSet{
//            expires_date = NSDate(timeIntervalSinceNow: expires_in)
//        }
//    }
//
////    uid	string	当前授权用户的UID。
//    var uid : String?
////profile_image_url	string	用户头像地址（中图），50×50像素
//    var profile_image_url: String?
////screen_name	string	用户昵称
//    var screen_name: String?
//    // isLogin 用户是否登录 ture 表登录
//    var isLogin : Bool = false
//
//    ///   定义一个属性,来记录未来的时间
//    var expires_date: NSDate?

    ///access_token	string	用于调用access_token，接口获取授权后的access token。\
    var access_token: String?
    ///expires_in	string	access_token的生命周期，单位是秒数。
    var expires_in: NSTimeInterval = 0 {
        // didSet 外接赋值后,调用这个方法
        didSet{
            // 2021-02-27 07:14:34 +0000
            expires_date = NSDate(timeIntervalSinceNow: expires_in)
            
        }
    }//10000
    
    ///uid	string	当前授权用户的UID。
    var uid: String?
    
    //再这个类的基础上添加2个属性
    ///profile_image_url	string	用户头像地址（中图），50×50像素
    var profile_image_url: String?
    ///screen_name	string	用户昵称
    var screen_name: String?
    
    ///   定义一个属性,来记录未来的时间
    var expires_date: NSDate?
    
//    override init() {
//        super.init()
//    }
//
//    
//     init(dic : [String : NSObject]){
//        super.init()
//        
//        setValuesForKeysWithDictionary(dic)
//        
//    }
//    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
//    }
    
    override init() {
        super.init()
    }
    
    // 实现了构造方法,默认的构造方法,不再提供
    
    //KVC构造函数
    init(dic: [String: NSObject]) {
        
        //先调用父类的 init
        super.init()
        // KVC赋值
        setValuesForKeysWithDictionary(dic)
        
    }
    
    //放置崩溃
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}

    
//    func save(file :String){
//        //沙盒路径
//        let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!
//        //拼接文件路径
//        let filePath = (path as NSString).stringByAppendingPathComponent(file)
//        
//        NSKeyedArchiver.archiveRootObject(self, toFile: filePath)
//    }
    
    func save(file: String){
        
        //保存
        //沙盒路径 -- 沙盒肯定有路径,所以可以强制解包
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        //拼接文件路径 -- string -> NSString as
        let filePath = (path as NSString).stringByAppendingPathComponent(file)
        
        NSKeyedArchiver.archiveRootObject(self, toFile: filePath)
        
    }

    
//    func encodeWithCoder(aCoder:NSCoder){
//        aCoder.encodeObject(access_token,forKey :"access_token")
//        aCoder.encodeObject(expires_in,forKey :"expires_in")
//        print(self.expires_date)
//        aCoder.encodeObject(uid, forKey: "uid")
//        aCoder.encodeObject(screen_name, forKey: "screen_name")
//        aCoder.encodeObject(profile_image_url, forKey: "profile_image_url")
//    }
    
    func encodeWithCoder(aCoder: NSCoder) {
        
        //要不要调super???
        
        aCoder.encodeObject(access_token, forKey: "access_token")
        aCoder.encodeObject(expires_date, forKey: "expires_date")
        aCoder.encodeObject(uid, forKey: "uid")
        aCoder.encodeObject(screen_name, forKey: "screen_name")
        aCoder.encodeObject(profile_image_url, forKey: "profile_image_url")
        
    }

    
//    required init?(coder aDecoder:NSCoder){
//        self.access_token = aDecoder.decodeObjectForKey("access_token") as? String
//        
//        self.expires_date = aDecoder.decodeObjectForKey("expires_date") as? NSDate
//        print(self.expires_date)
//        self.uid  = aDecoder.decodeObjectForKey("uid") as? String
//        
//        self.screen_name = aDecoder.decodeObjectForKey("screen_name") as? String
//        
//        self.profile_image_url  = aDecoder.decodeObjectForKey("profile_image_url") as? String
//    }
    required init?(coder aDecoder: NSCoder) {
        
        self.access_token = aDecoder.decodeObjectForKey("access_token") as? String
        
        self.expires_date = aDecoder.decodeObjectForKey("expires_date") as? NSDate
        
        self.uid  = aDecoder.decodeObjectForKey("uid") as? String
        
        self.screen_name = aDecoder.decodeObjectForKey("screen_name") as? String
        
        self.profile_image_url  = aDecoder.decodeObjectForKey("profile_image_url") as? String
    }

//    class func readObject (file : String) -> WQCUserModel? {
//        //        let path = NSSearchPathForDirectoriesInDomains(.NSSearchPathDirectory, UserDomainMask, true)
//        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
//        let filePath = (path as NSString).stringByAppendingPathComponent(file)
//        
//        let model = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as? WQCUserModel
//        
//            if let date = model?.expires_date{
//            // SComparisonResult
//            // case OrderedAscending -- 升序 由小到大
//            // case OrderedSame      -- 相等
//            // case OrderedDescending -- 降序 有大到小
//            // 未来的时间 大 ,现在的时间小, 没有过期
//            // 其他的都算过期
//
//            if date.compare(NSDate()) == NSComparisonResult.OrderedDescending{
//                return model
//            }else{
//                return nil
//            }
//            
//        }
//        return nil
//    }
    class func readObject(file: String) -> WQCUserModel? {
        
        // 路径
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        let filePath = (path as NSString).stringByAppendingPathComponent(file)
        //接档
        
        // 判断有效期限 -- 返回的是一个秒数?  秒数 + 当前的时间 = 未来的时间
        /*
        如果在有效期内,则返回数据
        没有在有效期,返回nil
        */
        let model = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as? WQCUserModel
        
        // 判断一下 expires_date是否有值,如果没有值,直接返回nil
        // 如果有值,就和当前时间进行比较
        if let date = model?.expires_date {
            /*
            
            NSComparisonResult
            case OrderedAscending -- 升序 由小到大
            case OrderedSame      -- 相等
            case OrderedDescending -- 降序 有大到小
            */
            // 未来的时间 大 ,现在的时间小, 没有过期
            // 其他的都算过期
            if date.compare(NSDate()) == .OrderedDescending{
                return model
            }else {
                return nil
            }
            
        }
        
        
        return nil
        
        
    }

   
}


